home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / misc / gms_dev.lha / GMSDev / Source / Asm / Demos / Julia.s < prev    next >
Encoding:
Text File  |  1998-05-07  |  6.5 KB  |  327 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2. ;A fractal generator, not orginally written by myself but now works with GMS.
  3.  
  4.     INCDIR    "INCLUDES:"
  5.     INCLUDE    "dpkernel/dpkernel.i"
  6.  
  7.     SECTION    "Demo",CODE
  8.  
  9. ;==========================================================================;
  10. ;                             INITIALISE DEMO
  11. ;==========================================================================;
  12.  
  13.     STARTDPK
  14.  
  15. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  16.     move.l    DPKBase(pc),a6
  17.     lea    ScreenTags(pc),a0
  18.     sub.l    a1,a1
  19.     CALL    Init
  20.     tst.l    d0
  21.     beq.s    Exit
  22.  
  23.     move.l    Screen(pc),a0
  24.     CALL    Display
  25.  
  26.     bra.s    Julia
  27.  
  28. Exit:    move.l    DPKBase(pc),a6
  29.     move.l    Screen(pc),a0
  30.     CALL    Free
  31.     MOVEM.L    (SP)+,A0-A6/D1-D7
  32.     moveq    #ERR_OK,d0
  33.     rts
  34.  
  35. ;==========================================================================;
  36. ;                                DRAW JULIA
  37. ;==========================================================================;
  38.  
  39. Julia:    lea    DataArea(pc),a5
  40.     move.l    #$fffffffe,(a5)+    ;a5 = $fffffffe+
  41.     move.l    #$80000014,(a5)+    ;a5 = mask & word per raster count
  42.  
  43. StartJulia:
  44.     move.l    DPKBase(pc),a6
  45.     move.l    Screen(pc),a0
  46.     move.l    GS_Bitmap(a0),a0
  47.     CALL    Clear
  48.  
  49.     move.l    Screen(pc),a0
  50.     move.l    GS_MemPtr1(a0),a0
  51.     lea    JuliaData(pc),a6
  52.     move.l    (a6)+,(a5)    ;a5 = ?
  53. .JuliaFound
  54.     move.w    (a5),MValue    ;initial m
  55.     move.w    (a6),PixStep    ;pixel step
  56.     move.w    (a6)+,RastStep    ;raster step
  57.     move.l    (a6)+,C1C2    ;initial c1 and c2
  58.     move.w    #256,LinesLeft(a5)    ;vertical height
  59.     lea    256*40(a0),a1
  60.     lea    256*40(a1),a2
  61.     lea    256*40(a2),a3
  62.     lea    $04000000,a6    ;for magnitude test
  63.  
  64.     lea    256*40(a3),a4
  65.  
  66.     MOVEM.L    A6/A0-A1/D0-D1,-(SP)
  67.     move.l    SCRBase(pc),a6
  68.     CALL    scrWaitVBL
  69.     MOVEM.L    (SP)+,A6/A0-A1/D0-D1
  70.  
  71. PixelLoop:
  72.     move.w    (a5),d1    ;d1 = Initial X
  73.     move.w    InitialY(a5),d0    ;d0 = Initial Y
  74.     moveq    #30,d7    ;d7 = 30.
  75.     movem.w    C1C2(pc),d4-d5    ;MA : d4/d5 = C1/C2
  76.     move.w    d0,d2    ;d2 = Initial Y
  77.     move.w    d1,d3    ;d3 = Initial X
  78.     bra.s    CheckMagnitude
  79.  
  80. IterateJulia:
  81.     sub.l    d3,d2    ;x^2 - y^2
  82.     lsl.l    #4,d2    ;fix decimal point
  83.     swap    d2    ;...
  84.     add.w    d4,d2    ;x1 = x^2 - y^2 + c1
  85.  
  86.     move.w    d1,d3    ;y
  87.     muls    d0,d3    ;x * y
  88.     lsl.l    #5,d3    ;fix decimal point and multiply by 2
  89.     swap    d3    ;...
  90.     add.w    d5,d3    ;y1 = 2 * x * y + c2
  91.  
  92.     move.w    d2,d0    ;x = x1
  93.     move.w    d3,d1    ;y = y1
  94.  
  95. CheckMagnitude:
  96.     muls    d2,d2    ;x^2
  97.     muls    d3,d3    ;y^2
  98.     move.l    d2,d6
  99.     add.l    d3,d6    ;z = x^2 + y^2
  100.     cmp.l    a6,d6    ;escaped yet?
  101.     dbhi    d7,IterateJulia
  102.  
  103.     move.w    PixelMask(a5),d6
  104.     moveq    #0,d5
  105.     move.b    JumpTable+1(pc,d7.w),d5
  106.     jmp    JumpTable(pc,d5.w)
  107.  
  108. JumpTable:
  109.     dc.b    Plot00-JumpTable
  110.     dc.b    Plot31-JumpTable
  111.     dc.b    Plot30-JumpTable
  112.     dc.b    Plot29-JumpTable
  113.     dc.b    Plot28-JumpTable
  114.     dc.b    Plot27-JumpTable
  115.     dc.b    Plot26-JumpTable
  116.     dc.b    Plot25-JumpTable
  117.     dc.b    Plot24-JumpTable
  118.     dc.b    Plot23-JumpTable
  119.     dc.b    Plot22-JumpTable
  120.     dc.b    Plot21-JumpTable
  121.     dc.b    Plot20-JumpTable
  122.     dc.b    Plot19-JumpTable
  123.     dc.b    Plot18-JumpTable
  124.     dc.b    Plot01-JumpTable
  125.     dc.b    Plot16-JumpTable
  126.     dc.b    Plot15-JumpTable
  127.     dc.b    Plot14-JumpTable
  128.     dc.b    Plot13-JumpTable
  129.     dc.b    Plot12-JumpTable
  130.     dc.b    Plot11-JumpTable
  131.     dc.b    Plot10-JumpTable
  132.     dc.b    Plot09-JumpTable
  133.     dc.b    Plot08-JumpTable
  134.     dc.b    Plot07-JumpTable
  135.     dc.b    Plot06-JumpTable
  136.     dc.b    Plot05-JumpTable
  137.     dc.b    Plot04-JumpTable
  138.     dc.b    Plot03-JumpTable
  139.     dc.b    Plot02-JumpTable
  140.     dc.b    Plot17-JumpTable
  141.  
  142. Plot22:    or.w    d6,(a4)
  143.     or.w    d6,(a2)
  144.     or.w    d6,(a1)
  145.     bra.b    Plot00
  146.  
  147. Plot21:    or.w    d6,(a4)
  148.     or.w    d6,(a2)
  149.     or.w    d6,(a0)
  150.     bra.b    Plot00
  151.  
  152. Plot20:    or.w    d6,(a4)
  153.     or.w    d6,(a2)
  154.     bra.b    Plot00
  155.  
  156. Plot18:    or.w    d6,(a4)
  157.     or.w    d6,(a1)
  158.     bra.b    Plot00
  159.  
  160. Plot26:    or.w    d6,(a4)
  161. Plot10:    or.w    d6,(a3)
  162.     or.w    d6,(a1)
  163.     bra.b    Plot00
  164.  
  165. Plot23:    or.w    d6,(a4)
  166.     or.w    d6,(a2)
  167.     or.w    d6,(a1)
  168.     or.w    d6,(a0)
  169.     bra.b    Plot00
  170.  
  171. Plot19:    or.w    d6,(a4)
  172.     or.w    d6,(a1)
  173.     or.w    d6,(a0)
  174.     bra.b    Plot00
  175.  
  176. Plot27:    or.w    d6,(a4)
  177. Plot11:    or.w    d6,(a3)
  178.     or.w    d6,(a1)
  179.     or.w    d6,(a0)
  180.     bra.b    Plot00
  181.  
  182. Plot17:    or.w    d6,(a4)
  183.     or.w    d6,(a0)
  184.     bra.b    Plot00
  185.  
  186. Plot25:    or.w    d6,(a4)
  187. Plot09:    or.w    d6,(a3)
  188.     or.w    d6,(a0)
  189.     bra.b    Plot00
  190.  
  191. Plot29:    or.w    d6,(a4)
  192. Plot13:    or.w    d6,(a3)
  193. Plot05:    or.w    d6,(a2)
  194.     or.w    d6,(a0)
  195.     bra.b    Plot00
  196.  
  197. Plot16:    or.w    d6,(a4)
  198.     bra.b    Plot00
  199.  
  200. Plot24:    or.w    d6,(a4)
  201. Plot08:    or.w    d6,(a3)
  202.     bra.b    Plot00
  203.  
  204. Plot28:    or.w    d6,(a4)
  205. Plot12:    or.w    d6,(a3)
  206. Plot04:    or.w    d6,(a2)
  207.     bra.b    Plot00
  208.  
  209. Plot30:    or.w    d6,(a4)
  210. Plot14:    or.w    d6,(a3)
  211. Plot06:    or.w    d6,(a2)
  212. Plot02:    or.w    d6,(a1)
  213.     bra.b    Plot00
  214.  
  215. Plot31:    or.w    d6,(a4)
  216. Plot15:    or.w    d6,(a3)
  217. Plot07:    or.w    d6,(a2)
  218. Plot03:    or.w    d6,(a1)
  219. Plot01:    or.w    d6,(a0)
  220.  
  221. Plot00:    MOVE.L    D0,-(SP)
  222.     move.w    PixStep(pc),d0
  223.     add.w    d0,(a5)    ;pixel "step"
  224.     MOVE.L    (SP)+,D0
  225.  
  226.     ror.w    PixelMask(a5)    ;shift mask over
  227.     bpl.w    PixelLoop
  228.  
  229.     addq.w    #2,a0
  230.     addq.w    #2,a1
  231.     addq.w    #2,a2
  232.     addq.w    #2,a3
  233.     addq.w    #2,a4
  234.     subq.w    #1,WordsInRaster(a5)    ; subtract from word counter
  235.     bne.w    PixelLoop
  236.  
  237.     btst.b    #6,$bfe001
  238.     beq    Exit
  239.  
  240.     move.w    #320/16,WordsInRaster(a5) ; words per raster
  241.     btst.b    #2,$dff016    ;new julia?
  242.     beq.b    NewJulia
  243.  
  244. RasterInit:
  245.     move.w    MValue(pc),(a5)    ;inital M value
  246. RasterAdd:
  247.     MOVE.L    D0,-(SP)
  248.     move.w    RastStep(pc),d0
  249.     add.w    d0,InitialY(a5)    ; raster "step"
  250.     MOVE.L    (SP)+,D0
  251.     subq.w    #1,LinesLeft(a5)
  252.     bne.w    PixelLoop
  253.  
  254. WaitMouse:
  255.     btst.b    #6,$bfe001
  256.     beq    Exit
  257.     btst.b    #2,$dff016
  258.     bne.b    WaitMouse
  259.  
  260. NewJulia:
  261.     btst.b    #2,$dff016
  262.     beq.b    NewJulia
  263.     bra.w    StartJulia
  264.  
  265. ;===========================================================================;
  266. ;                                  DATA
  267. ;===========================================================================;
  268.  
  269. MValue:        dc.w  0
  270. PixStep:    dc.w  0
  271. RastStep:    dc.w  0
  272. C1C2:        dc.l  0
  273.  
  274. ScreenTags:    dc.l  TAGS_SCREEN
  275. Screen:        dc.l  0
  276.         dc.l  GSA_Width,320
  277.         dc.l  GSA_Height,256
  278.         dc.l    GSA_BitmapTags,0
  279.         dc.l    BMA_Type,PLANAR
  280.         dc.l    BMA_Palette,.palette
  281.         dc.l    TAGEND,0
  282.         dc.l  TAGEND
  283.  
  284. .palette    dc.l  PALETTE_ARRAY,32
  285.         dc.l  $000000,$803010,$0000e0,$0000d0,$0000c0,$0000b0,$0000a0,$000090
  286.         dc.l  $000080,$000070,$100060,$200050,$300040,$400030,$500020,$601010
  287.         dc.l  $702000,$0000f0,$904020,$a05030,$b06040,$c07050,$d08060,$c09070
  288.         dc.l  $b0a080,$a090a0,$9080b0,$807090,$706070,$505050,$304030,$103010
  289.  
  290. JuliaData:
  291.     dc.l    $f800eb00
  292.     dc.w    $0018,$0100,$0ad0,$ec00
  293.  
  294.     dc.l    $fd21eeae
  295.     dc.w    $0225,$000d,$f420,$fd43
  296.  
  297.     dc.l    $ef000010
  298.     dc.w    $0600,$0100,$f226,$fd56
  299.  
  300.     dc.l    $0015ee00
  301.     dc.w    $fb40,$ede2,$f0b2,$001d
  302.  
  303.     dc.l    $05c0ff00
  304.     dc.w    $ef12,$e812,$001d,$f320
  305.     dc.l    0
  306.  
  307.  
  308.         rsset -4
  309. PixelMask    rs.w  1    ;mask to "OR" with bitplanes
  310. WordsInRaster    rs.w  1    ;number of words left in current raster
  311. InitialX    rs.w  1    ;inital x
  312. InitialY    rs.w  1    ;inital y
  313. LinesLeft    rs.w  1    ;number of lines left to draw
  314.  
  315.         dc.l  0
  316. DataArea:    ds.b  40
  317.  
  318. ;===========================================================================;
  319.  
  320. ProgName:    dc.b  "Julia",0
  321. ProgAuthor:    dc.b  "Original Author Unknown",0
  322. ProgDate:    dc.b  "January 1998",0
  323. ProgCopyright:    dc.b  "Freely distributable.",0
  324. ProgShort:    dc.b  "Julia generator.",0
  325.         even
  326.  
  327.